package com.example.hospital.util;

import cn.hutool.core.util.StrUtil;
import com.example.hospital.constant.UserConstants;
import io.jsonwebtoken.*;

import java.util.Date;

public class JwtHelper {

    /**
     * 根据参数设置token
     *
     * @param phone 手机号
     * @param role  账号类型
     * @return token
     */
    public static String createToken(String phone, UserConstants.Role role) {
        String token = Jwts.builder().setSubject("YYGH-USER").setExpiration(new Date(System.currentTimeMillis() + UserConstants.TOKEN_EXPIRATION))
                .claim("phone", phone)
                .claim("role", role.ordinal())
                .signWith(SignatureAlgorithm.HS512, UserConstants.TOKEN_SIGN_KEY)
                .compressWith(CompressionCodecs.GZIP).compact();
        return token;
    }

    /**
     * 根据token获取到用户手机号
     *
     * @param token
     * @return 用户手机号
     */
    public static String getPhoneNumber(String token) {
        if (StrUtil.isEmpty(token)) return null;
        Jws<Claims> claimsJws = Jwts.parser().setSigningKey(UserConstants.TOKEN_SIGN_KEY).parseClaimsJws(token);
        Claims claims = claimsJws.getBody();
        return (String) claims.get("phone");
    }

    /**
     * 根据token拿到账号类型
     *
     * @param token token
     * @return 账号类型
     */
    public static UserConstants.Role getUserRole(String token) {
        if (StrUtil.isEmpty(token)) return null;
        Jws<Claims> claimsJws = Jwts.parser().setSigningKey(UserConstants.TOKEN_SIGN_KEY).parseClaimsJws(token);
        Claims claims = claimsJws.getBody();
        return UserConstants.Role.values()[(Integer) claims.get("role")];
    }

}
